/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.foxinline.servico;

import br.com.foxinline.modelo.Mensagem;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.Query;

/**
 *
 * @author roniere
 */
@Stateless
public class MensagemServico extends ServicoGenerico<Mensagem> {
    
    @EJB
    UsuarioServico userService;

    public MensagemServico() {
        super(Mensagem.class);
    }
    
    public List<Mensagem> messagesEnviadas() {
        List<Mensagem> messages = new ArrayList<Mensagem>();
        try {
            String sql = "Select m from Mensagem m JOIN m.userFrom u where u.id =:user "
                    + "order by m.dateMessage DESC";
            Query query = getEntityManager().createQuery(sql).setMaxResults(50);
            query.setParameter("user", userService.getCurrentUser().getId());
            messages = query.getResultList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return messages;
    }
    
    public List<Mensagem> messagesRecebidas() {
        List<Mensagem> messages = new ArrayList<Mensagem>();
        try {
            String sql = "Select m from Mensagem m JOIN m.userTo u where u.id =:user "
                    + "order by m.dateMessage DESC";
            Query query = getEntityManager().createQuery(sql).setMaxResults(50);
            query.setParameter("user", userService.getCurrentUser().getId());
            messages = query.getResultList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return messages;
    }

    /**
     * Retorna a Quantidade de Mensagens não lidas do usuário logado.
     *
     * @return
     */
    public int countMessagesUnread() {
        Long i = new Long(0);
        try {
            String sql = "Select COUNT(m) from Mensagem m JOIN m.userTo u where u.id=:login AND m.wasRead=FALSE";
            Query query = getEntityManager().createQuery(sql);
            query.setParameter("login", userService.getCurrentUser().getId());
            i = (Long) query.getSingleResult();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return i.intValue();
    }
}
